// pages/merchant-list/merchant-list.js
const app = getApp();
const request = require('../../utils/request.js'); // 引入请求工具

Page({
  data: {
    merchants: [], // 商户列表数据
    searchKeyword: '', // 搜索关键词
    isLoading: false, // 新增加载状态
    currentRadius: 5, // 当前搜索半径，初始5公里
    currentLimit: 10, // 当前返回数量，初始10个
    maxRadius: 12, // 最大半径12公里
    maxLimit: 50, // 最大返回数量50个
    radiusIncrement: 3, // 每次半径增加3公里
    limitIncrement: 10, // 每次返回数量增加10个
  },

  onLoad() {
    this.loadMerchants(); // 页面加载时请求商户数据
  },
  /**
   * 下拉刷新事件处理
   */
  onPullDownRefresh() {
    console.log('开始下拉刷新');
    this.setData({ isLoading: true });
    // 更新半径和数量
    const { currentRadius, currentLimit, maxRadius, maxLimit, radiusIncrement, limitIncrement } = this.data;
    
    let newRadius = currentRadius + radiusIncrement;
    let newLimit = currentLimit + limitIncrement;
    
    // 限制最大值
    if (newRadius > maxRadius) {
      newRadius = maxRadius;
    }
    if (newLimit > maxLimit) {
      newLimit = maxLimit;
    }
    
    this.setData({
      currentRadius: newRadius,
      currentLimit: newLimit
    });
    // 显示刷新提示
    this.showRefreshHint(newRadius, newLimit);
    this.loadMerchants(); // 重新加载数据
  },
/**
   * 显示刷新提示
   */
showRefreshHint(radius, limit) {
  let hint = '';
  
  if (radius >= this.data.maxRadius) {
    hint = '已显示全部商户 (12公里内，最多50个)';
  } else if (radius >= this.data.maxRadius) {
    hint = `搜索范围: 12公里内商户`;
  } else {
    hint = `搜索范围: ${radius}公里内商户`;
  }
  
  wx.showToast({
    title: hint,
    icon: 'none',
    duration: 2000,
    mask: true
  });
},



  /**
   * 加载商户数据
   */
  loadMerchants() {
    const { searchKeyword } = this.data;
    return request({
      url: '/merchant/wx/nearby',
      method: 'GET',
      data: {
        userLon: 118.827576,
        userLat: 31.930988,
        radius: 5,
        limit: 10
      }
    }).then((res) => {
      this.setData({ isLoading: false });
      wx.stopPullDownRefresh(); // 成功时停止刷新
      if (res.code === 200) {
        // 格式化distance字段：将 {value: 0.0736, metric: "KILOMETERS"} 转为保留两位小数的字符串
        const formattedMerchants = res.data.map(merchant => ({
          ...merchant,
          image: `http://localhost:9000${merchant.image || ''}`, 
          distanceStr: `${parseFloat(merchant.distance.value).toFixed(2)}km` // 新增distanceStr字段
        }));
        this.setData({
          merchants: formattedMerchants
        });
      } else {
        wx.showToast({
          title: res.msg || '获取商户数据失败',
          icon: 'none'
        });
      }
    }).catch((error) => {
      console.error('请求失败：', error);
      this.setData({ isLoading: false });
      wx.stopPullDownRefresh(); // 失败时也必须停止刷新
      wx.showToast({
        title: '网络异常，请重试',
        icon: 'none'
      });
    });
  },


  /**
   * 搜索输入
   */
  onSearchInput(e) {
    const searchKeyword = e.detail.value.trim();
    this.setData({ searchKeyword }, () => {
      this.loadMerchants(); // 实时搜索
    });
  },

  /**
   * 前往商户详情页
   */
  gotoDetail(e) {
    const merchantId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/merchant-detail/merchant-detail?id=${merchantId}`
    });
  }
});